package com.itcam.daijia.rules.config;

import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.KieModule;
import org.kie.api.runtime.KieContainer;
import org.kie.internal.io.ResourceFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DroolsConfig {
    // 制定规则文件的路径
    private static final String RULES_CUSTOMER_RULES_DRL = "rules/FeeRule.drl";

    /**
     * 创建并配置一个KieContainer实例，用于加载和管理Drools规则。
     *
     * @return 配置好的KieContainer实例。
     */
    @Bean
    public KieContainer kieContainer() {
        // 获取KieServices实例，用于创建和管理Kie容器和模块
        KieServices kieServices = KieServices.Factory.get();
        // 创建一个KieFileSystem实例，用于加载和管理规则文件
        KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
        // 将规则文件添加到KieFileSystem中
        kieFileSystem.write(ResourceFactory.newClassPathResource(RULES_CUSTOMER_RULES_DRL));
        // 创建一个KieBuilder实例，用于编译和构建Kie模块
        KieBuilder kb = kieServices.newKieBuilder(kieFileSystem);
        // 编译并构建所有的资源
        kb.buildAll();
        // 获取构建后的KieModule实例
        KieModule kieModule = kb.getKieModule();
        // 创建一个新的KieContainer实例，使用KieModule的ReleaseId
        KieContainer kieContainer = kieServices.newKieContainer(kieModule.getReleaseId());
        // 返回配置好的KieContainer实例
        return kieContainer;
    }


}